package com.study.sort;

import com.study.methodcontrucet.Employee;
import com.study.methodcontrucet.EmployeeDataList;
import org.junit.Test;

import java.util.List;

/**
 * 对各种集合排序
 *
 * @author yyb8152
 * @since 20220920
 **/
public class CollectionSort {

    /**
     * 使用List集合排序
     */
    @Test
    public void arrayListTest() {
        List<Employee> employeeList = EmployeeDataList.getEmployees();
        // 对象之间的比较：方法一：对象实现Comparable<T> 接口,然后重写里面的compareTo()方法,诸如：String、Integer
        //                    缺点：只能默认使用一种对象的属性排序，在重写compareTo()在对象写死的，不能自定义。
        // Collections.sort(employeeList);

        // 对象之间的比较：方法二：Comparator比较器的使用：Comparator接口的实现，重写里面的 compare 方法
        //                     （1）Collections.sort(list,Comparator<T>）;
        //                      (2)list.sort(Comparator<T>);
        /*  Collections.sort(employeeList, new Comparator<Employee>() {
            @Override
            public int compare(Employee e1, Employee e2) {
                int compare = e1.getAge() - e1.getAge();
                return compare;
            }
        });*/

        // 对象之间的比较: 方法二:使用Stream流的sorted()方法，
        employeeList.stream().sorted((e1, e2) -> {
            int compare = Integer.compare(e1.getAge(), e2.getAge());
            if (compare != 0) {
                // 返回大于或者小于的结果
                return compare;
            } else {
                // 二者相同时比较金额。
                return Double.compare(e1.getSalary(), e2.getSalary());
            }
        }).forEach(System.out::println);


    }
}
